/**
 * 项目路由辅助工具模块
 * 用于多项目架构下的跨项目导航功能
 */

const projectHelper = require('./project_helper.js');

// OA项目的路由配置
const oaRoutes = {
  'home/index': 'home_controller@getHomeIndex',
  'research_project/flow_history': 'research_project_controller@getFlowHistory',
  'research_project/resource_versions': 'research_project_controller@getResourceVersions',
  'task/detail': 'task_controller@getTaskDetail',
  'task/project_tasks': 'task_controller@getProjectTasks',
  'task/update_status': 'task_controller@updateTaskStatus',
  'task/add_comment': 'task_controller@addTaskComment',
  'task/my_tasks': 'task_controller@getMyTasks',
  'task/insert': 'task_controller@insertTask',
  'project_resource/list': 'research_controller@getResearchResourceList',
  'project_resource/detail': 'research_controller@getResourceDetail',
  'project_resource/edit': 'research_controller@editResource',
  'project_resource/add': 'research_controller@addResource',
  'project_flow/history': 'project_flow_controller@getFlowHistory',
  'feedback/list': 'feedback_controller@getFeedbackList',
  'feedback/detail': 'feedback_controller@getFeedbackDetail',
  'feedback/add': 'feedback_controller@addFeedback',
  'feedback/update': 'feedback_controller@updateFeedback'
};

// CRM项目路由配置
const crmRoutes = {
  'home/index': 'crm_home_controller@getHomeIndex',
  'customer/list': 'customer_controller@getCustomerList',
  'customer/detail': 'customer_controller@getCustomerDetail',
  'customer/add': 'customer_controller@addCustomer',
  'customer/edit': 'customer_controller@editCustomer'
};

// PLM项目路由配置
const plmRoutes = {
  'home/index': 'plm_home_controller@getHomeIndex',
  'project/list': 'research_controller@getResearchListPage',
  'project/detail': 'research_controller@getResearchDetailPage',
  'project/edit': 'research_controller@getResearchEditPage',
  'project/graph': 'research_controller@getResearchGraphPage',
  'resource/list': 'research_controller@getResourceListPage',
  'resource/detail': 'research_controller@getResourceDetailPage',
  'resource/edit': 'research_controller@getResourceEditPage',
  'role/simulator': 'role_controller@getSimulatorPage'
};

// 项目路由映射
const routeMap = {
  'oa': oaRoutes,
  'crm': crmRoutes,
  'plm': plmRoutes
};

// 项目首页映射
const homePages = {
  'oa': '/projects/oa/pages/default/index/default_index',
  'crm': '/projects/crm/pages/default/index/default_index',
  'plm': '/projects/plm/pages/default/index/default_index'
};

// 项目登录页面映射
const loginPages = {
  'oa': '/projects/oa/pages/my/login/my_login',
  'crm': '/projects/oa/pages/my/login/my_login', // 共用OA的登录页
  'plm': '/projects/oa/pages/my/login/my_login'  // 共用OA的登录页
};

module.exports = {
  // 项目路由映射
  routeMap,
  
  /**
   * 获取项目路由配置
   * @param {String} projectId 项目ID
   * @returns {Object} 路由配置
   */
  getProjectRoutes(projectId) {
    return routeMap[projectId] || {};
  },
  
  /**
   * 获取路由处理器
   * @param {String} projectId 项目ID
   * @param {String} routePath 路由路径
   * @returns {String} 控制器@方法
   */
  getRouteHandler(projectId, routePath) {
    const routes = this.getProjectRoutes(projectId);
    return routes[routePath] || null;
  },
  
  /**
   * 跨项目导航
   * @param {String} project 项目ID
   * @param {String} page 页面路径
   * @param {Object} params 参数
   */
  navigateToProject(project, page, params = {}) {
    // 设置当前项目
    projectHelper.setCurrentProject(project);
    
    // 构建URL
    const url = `/projects/${project}/pages/${page}`;
    
    // 构建查询参数
    const query = Object.entries(params)
      .map(([k, v]) => `${k}=${encodeURIComponent(v)}`)
      .join('&');
    
    // 导航到目标页面
    wx.navigateTo({
      url: query ? `${url}?${query}` : url,
      fail: (err) => {
        console.error('项目间导航失败:', err);
        
        // 尝试使用switchTab（如果是tabBar页面）
        wx.switchTab({
          url: query ? `${url}?${query}` : url,
          fail: () => {
            console.error('项目间Tab切换也失败');
            // 返回首页
            this.switchTabToHome(project);
          }
        });
      }
    });
  },
  
  /**
   * 跨项目重定向
   * @param {String} project 项目ID
   * @param {String} page 页面路径
   * @param {Object} params 参数
   */
  redirectToProject(project, page, params = {}) {
    // 设置当前项目
    projectHelper.setCurrentProject(project);
    
    // 构建URL
    const url = `/projects/${project}/pages/${page}`;
    
    // 构建查询参数
    const query = Object.entries(params)
      .map(([k, v]) => `${k}=${encodeURIComponent(v)}`)
      .join('&');
    
    // 重定向到目标页面
    wx.redirectTo({
      url: query ? `${url}?${query}` : url,
      fail: (err) => {
        console.error('项目间重定向失败:', err);
        // 返回首页
        this.switchTabToHome(project);
      }
    });
  },
  
  /**
   * 切换到项目首页Tab
   * @param {String} project 项目ID
   */
  switchTabToHome(project) {
    // 设置当前项目
    projectHelper.setCurrentProject(project);
    
    // 获取首页URL
    const homeUrl = homePages[project] || homePages.oa;
    
    // 切换到首页Tab
    wx.switchTab({
      url: homeUrl,
      fail: (err) => {
        console.error('切换到首页失败:', err);
        // 最后尝试重启到首页
        wx.reLaunch({
          url: homeUrl
        });
      }
    });
  },
  
  /**
   * 跨项目重启
   * @param {String} project 项目ID
   * @param {String} page 页面路径
   * @param {Object} params 参数
   */
  reLaunchToProject(project, page, params = {}) {
    // 设置当前项目
    projectHelper.setCurrentProject(project);
    
    // 构建URL
    const url = `/projects/${project}/pages/${page}`;
    
    // 构建查询参数
    const query = Object.entries(params)
      .map(([k, v]) => `${k}=${encodeURIComponent(v)}`)
      .join('&');
    
    // 重启到目标页面
    wx.reLaunch({
      url: query ? `${url}?${query}` : url
    });
  },
  
  /**
   * 导航到登录页
   * @param {String} project 当前项目ID
   * @param {String} retUrl 登录后返回的URL
   */
  navigateToLogin(project, retUrl) {
    // 获取登录页URL
    const loginUrl = loginPages[project] || loginPages.oa;
    
    // 构建完整URL（带返回参数）
    const url = retUrl ? 
      `${loginUrl}?retUrl=${encodeURIComponent(retUrl)}` : 
      loginUrl;
    
    // 导航到登录页
    wx.navigateTo({
      url,
      fail: (err) => {
        console.error('导航到登录页失败:', err);
        // 尝试重定向
        wx.redirectTo({ url });
      }
    });
  },
  
  /**
   * 检查并处理登录状态
   * @param {Object} userStore 用户状态仓库
   * @param {String} project 当前项目ID
   * @param {String} currentPage 当前页面路径
   * @returns {Boolean} 是否已登录
   */
  checkLoginAndNavigate(userStore, project, currentPage) {
    if (!userStore || !userStore.isLogin) {
      // 未登录，导航到登录页
      this.navigateToLogin(project, currentPage);
      return false;
    }
    return true;
  }
};
